Device = 16F877A
 Xtal = 4
 All_Digital=true
 
DEFINE OSC 4				; Definir que se trabajar con 4MHz.
Include "MODEDEFS.BAS"      ; Incluir definiciones del modo serial

CMCON = 7					; Comparadores analgicos OFF
TRISB = %00000001


; Nombres para los pines
Symbol clock  = PORTD.0
Symbol datos  = PORTD.1
Symbol SENSOR = PORTB.0

; Declaracin de variables
Dim CONTADOR As Word
Dim Dsp1     As Byte
Dim Dsp2     As Byte
Dim  Dsp3    As Byte
Dim Index    As Byte


; Mandar ceros en formato 7 segmentos a los registros de desplazamiento.
SHOut datos,clock,LsbFirst,[$FC,$FC,$FC]

 INICIO:
; Rutina para incrementar el contador
    If SENSOR = 0 Then
    DelayMS   250            ; Retardo antirrebote (250mS)
    Inc CONTADOR             ; Incrementamos Counter + 1
    GoSub   Tabla            ; Ir a las tablas de conversin
    EndIf
GoTo INICIO

    
Tabla:
; Subrutina de conversin para cdigo de 7 segmentos ctodo comn.
    Index = Dig CONTADOR,0   ; Tomamos las unidades
    LookUpL Index,[$FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6],Dsp1

    Index = Dig CONTADOR,1   ; Tomamos las decenas
    LookUpL Index,[$FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6],Dsp2

    Index =Dig CONTADOR,2    ; Tomamos la centenas
    LookUpL Index,[$FC,$60,$DA,$F2,$66,$B6,$BE,$E0,$FE,$F6],Dsp3

; Mandamos los datos hacia los registros de desplazamiento.   
    SHOut datos,clock,LsbFirst,[Dsp1,Dsp2,Dsp3]
    Return    
    End